The cost and complexity of developing large-scale software systems has increased dramatically in recent years. Software reuse and software maintenance are two of the biggest challenges in software engineering. Software reusability is a performance metric indicating the degree to which a software module or other software product can be used in more than one computer program or system. Software maintenance includes any modifications to a software product after the product is initially delivered, e.g., to correct faults, improve performance or to adapt the product to another environment.
Object-oriented (OO) software development techniques have been said to offer significant advantages in the context of software reuse and maintenance. Generally, object-oriented techniques represent real-world and abstract objects using programmed objects. The concept of abstraction allows object-oriented programmers to focus only on relevant characteristics of the real-world domain. While object-oriented programming techniques have offered significant advances in the area of software reuse and maintenance, such object.-oriented techniques suffer from a number of limitations, which if overcome, could greatly improve the ability to reuse and maintain software products.
Most current component technologies are based on a set of standards, such as Component Object Model (COM), Enterprise JavaBeans (EJB), and Common Object Request Broker Architecture (CORBA). For a more detailed discussion of the current state of component software technology, see, for example, Clemens Szyperski. Component Software: Beyond Object-Oriented Programming. Addison-Wesley, 1999, incorporated by reference herein.
Generally, these component models define a set of interfaces or services that can be invoked by clients. Existing component models have strived to ensure that components are reusable modules that can be inserted into any compatible system, without knowing the internal details of the component. For example, a component that is developed using the WebSpere platform from International Business Machines Corporation of Armonk, N.Y. should seamlessly be portable to a WebLogic platform. In practice, however, this generally does not happen since components are artifacts of Application Programming Interfaces (APIs), and there is no clear semantic definition of a component. Currently, very little research has been done in promoting components as first-class citizens in a main stream programming language.
A need therefore exists for a method for programming software components that enhances the maintainability and reusability of components.